home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
PPLS.ZIP
/
PPL.DOC
< prev
next >
Wrap
Text File
|
1993-12-30
|
48KB
|
1,397 lines
| A vertical bar denotes changes since the last posting of the file.
|
| Current Posting Dated: 05-03-93
PCBoard Programming Language
Version 1.00
----------------------------
PPL SOURCE SYNTAX
Each line of a PPL source file may contain none, one, some or all
of the following sections:
[KEYWORD ][EXPR|VAR][,EXPR|VAR][;|'][COMMENT TEXT]
KEYWORD - A PPL statement used to accomplish some task.
EXPR - A PPL expressioin which may contain VARs, CONSTs,
and/or FUNCs.
VAR - A PPL variable with optional array subscript.
CONST - A PPL constant.
FUNC - A PPL function that returns a value.
; - Used to start a comment. Ignored by the compiler.
' - Used to start a comment. Ignored by the compiler.
COMMENT - Comment text following the ; or '.
Ignored by the compiler.
If a line is blank or contains only a comment, it is skipped.
If it contains a KEYWORD, that line is compiled into a tokenized
format.
If it doesn't contain a KEYWORD but some argument, it is assumed to
be an assignement statement (LET).
DATA TYPES
PPL utilizes the following data types:
BOOLEAN
unsigned character (1 byte)
0 = FALSE, non-0 = TRUE
DATE
unsigned integer (2 bytes)
PCBoard julian date (count of days since 1/1/1900)
INTEGER
signed long integer (4 bytes)
-2,147,483,648 - +2,147,483,647
MONEY
signed long integer (4 bytes)
-$21,474,836.48 - +$21,474,836.47
STRING
far character pointer (4 bytes)
NULL is an empty string; non-NULL points to a string of some
length less than or equal to 256
TIME
signed long integer (4 bytes)
Count of seconds since midnight
SYNTAX
TYPE var[(dim[,dim[,dim]])][,var...]
NOTES: Any type may be assigned to any other type. This is the
simplest way to accomplish type conversion. BOOLEAN, DATE,
INTEGER, MONEY and TIME are all integer types and may be
assigned to each other. Assignment from a larger data type
to a smaller data type automatically converts the data to a
format suitable for the smaller data type. Conversion to
and from STRINGs is dependent on the other data type.
DATEs are imported/exported as "MM-DD-YY". TIMEs are
imported/exported as "HH:MM:SS". MONEYs are imported/
exported as "#.##" without embedded dollar signs or commas,
and using as many characters as needed to the left of the
decimal point. All variables must be declared before use.
CONSTANTS
PPL allows user defined constants in the following formats:
$#.## - A MONEY constant (dollar sign followed by optional dollars
followed by decimal point followed by cents; # = 0-9)
#h - An INTEGER hexadecimal constant (# = 0-9 & A-F)
#d - An INTEGER decimal constant (# = 0-9)
#o - An INTEGER octal constant (# = 0-7)
#b - An INTEGER binary constant (# = 0-1)
# - An INTEGER constant (# = 0-9)
"X" - A STRING constant (X = any displayable text)
@X## - An INTEGER @X constant (# = 0-9 & A-F)
The following predefined constant labels are also defined:
AUTO = 2000h
Parameter passed to INPUTSTR and PROMPTSTR statements
(automatically press enter after 10 seconds of no user input)
BELL = 800h
Parameter passed to DISPTEXT statement
(sound a bell when prompt displayed)
DEFS = 0
Parameter passed to various statements for default values
ECHODOTS = 1h
Parameter passed to INPUTSTR and PROMPTSTR statements
(echo dots instead of user input)
ERASELINE = 20h
Parameter passed to INPUTSTR and PROMPTSTR statements
(erase the current line when user presses enter)
FALSE = 0
BOOLEAN FALSE value
FCL = 2
Value passed to STARTDISP to force line counting display
FIELDLEN = 2h
Parameter passed to INPUTSTR and PROMPTSTR statements (displays
parenthesis to show input field width if ANSI enabled)
FNS = 1
Value passed to STARTDISP to force non-stop display
F_EXP = 2h
Expired subscription access allowed flag for CONFFLAG and
CONFUNFLAG
F_MW = 10h
Mail waiting flag for CONFFLAG and CONFUNFLAG
F_REG = 1h
Registered access allowed flag for CONFFLAG and CONFUNFLAG
F_SEL = 4h
Conference selected flag for CONFFLAG and CONFUNFLAG
F_SYS = 8h
Conference SysOp access flag for CONFFLAG and CONFUNFLAG
GRAPH = 1h
Parameter passed to DISPFILE statement to search for graphics
specific files
GUIDE = 4h
Parameter passed to INPUTSTR and PROMPTSTR statements
(displays parenthesis above current line if FIELDLEN used and
ANSI not enabled)
HIGHASCII = 1000h
Parameter passed to INPUTSTR and PROMPTSTR statements
(allow high ascii characters, regardless of current valid
character set, if disable high ascii filter set to yes)
LANG = 4h
Parameter passed to DISPFILE statement to search for language
specific files
LFAFTER = 100h
Parameter passed to INPUTSTR, PROMPTSTR and DISPTEXT statements
(send an extra line feed after user presses enter)
LFBEFORE = 80h
Parameter passed to INPUTSTR, PROMPTSTR and DISPTEXT statements
(send an extra line feed before prompt display)
LOGIT = 8000h
Parameter passed to DISPTEXT statement
(log text to callers log)
LOGITLEFT = 10000h
Parameter passed to DISPTEXT statement
(log text to callers log, forcing left justification)
NC = 0
Value passed to STARTDISP to not change display mode
NEWLINE = 40h
Parameter passed to INPUTSTR, PROMPTSTR and DISPTEXT statements
(send a line feed after user presses enter)
NOCLEAR = 400h
Parameter passed to INPUTSTR and PROMPTSTR statements
(don't clear field at first keypress regardless of ANSI)
O_RD = 0
Parameter passed to FCREATE/FOPEN/FAPPEND to open a file in
read only mode
O_RW = 2
Parameter passed to FCREATE/FOPEN/FAPPEND to open a file in
read and write mode
O_WR = 1
Parameter passed to FCREATE/FOPEN/FAPPEND to open a file in
write only mode
SEC = 2h
Parameter passed to DISPFILE statement to search for security
specific files
STACKED = 10h
Parameter passed to INPUTSTR and PROMPTSTR statements
(allow semi-colons and spaces in addition to valid character
set passed)
S_DB = 3h
Parameter passed to FCREATE/FOPEN/FAPPEND to deny read and
write (both) access from other processes
S_DN = 0h
Parameter passed to FCREATE/FOPEN/FAPPEND to allow read and
write (deny none) access from other processes
S_DR = 1h
Parameter passed to FCREATE/FOPEN/FAPPEND to deny read access
from other processes
S_DW = 2h
Parameter passed to FCREATE/FOPEN/FAPPEND to deny write access
from other processes
TRUE = 1
BOOLEAN TRUE value
UPCASE = 8h
Parameter passed to INPUTSTR and PROMPTSTR statements
(force user input to upper case)
WORDWRAP = 200h
Parameter passed to INPUTSTR and PROMPTSTR statements
(if user hits end of line, save the text at the end of the line
for future use)
YESNO = 4000h
Parameter passed to INPUTSTR and PROMPTSTR statements
(Only allow international yes/no responses)
PREDEFINED VARIABLES
PPL predefines the following variables for user record access:
BOOLEAN U_CLS
Clear screen between messages status
BOOLEAN U_DEF79
79 column message editor default
BOOLEAN U_EXPERT
Users current expert status
BOOLEAN U_FSE
Users full screen editor default
BOOLEAN U_FSEP
Prompt for full screen editor status
BOOLEAN U_LONGHDR
6 line vs 4 line message header status
BOOLEAN U_SCROLL
Scroll multi-screen message status
DATE U_EXPDATE
The users subscription expiration date
DATE U_PWDEXP
The date that the users password expires and must be changed
INTEGER U_EXPSEC
The users expired security level
INTEGER U_PAGELEN
The users page length
INTEGER U_SEC
The users security level
STRING U_ADDR(5)
The users address information (if the SysOp has enabled address
recording)
Subscript 0 = First street line
1 = Second street line
2 = City
3 = State
4 = Zip
5 = Country
STRING U_ALIAS
The users alias (if the SysOp has enabled alias use)
STRING U_BDPHONE
The users business/data phone number
STRING U_CITY
The users city/state information
STRING U_CMNT1
The users comment field
STRING U_CMNT2
The SysOps comment field
STRING U_HVPHONE
The users home/voice phone number
STRING U_NOTES(4)
Notes about the user (if the SysOp has enabled the note
capability)
Subscripts 0-4 hold lines 1-5
STRING U_PWD
The users password
STRING U_TRANS
The users default transfer protocol
STRING U_VER
The users verification string (if the SysOp has enabled user
verification)
EXPRESSION OPERATORS
PPL allows the following operators to be used in expressions
(lvalue and rvalue are simply the values to the left and right,
respectively, of binary operators):
( - Start sub-expression (also allows [ or { to be used)
) - End sub-expression (also allows ] or } to be used)
^ - Raise lvalue to the power of rvalue
* - Multiply lvalue by rvalue
/ - Divide lvalue by rvalue
% - Remainder of lvalue divided by rvalue
+ - Add rvalue to lvalue
- - Subtract rvalue from lvalue
= - Is lvalue equal to rvalue (also allows ==)
<> - Is lvalue not equal to rvalue (also allows != and ><)
< - Is lvalue less than rvalue
<= - Is lvalue less than or equal to rvalue (also allows =<)
> - Is lvalue greater than rvalue
>= - Is lvalue greater than or equal to rvalue (also allows =>)
! - Logical not of rvalue
& - Logical and of lvalue with rvalue (also allows &&)
| - Logical or of lvalue with rvalue (also allows ||)
FUNCTIONS
PPL allows the following functions, returning the specified type,
with the specified arguments, to be used in an expression (some
functions require no arguments, in which case the parenthesis are
empty; if arguments are required, the arguments may all be
expressions of any type, but will be converted to one of the
following types prior to function evaluation: BEXP (BOOLEAN),
DEXP (DATE), IEXP (INTEGER), MEXP (MONEY), SEXP (STRING),
TEXP (TIME)):
ABORT() (BOOLEAN)
Returns a flag indicating whether or not the user aborted the
display of data via ^K/^X or answering no to a MORE? prompt
ABS(IEXP) (INTEGER)
Returns the absolute value of IEXP
AND(IEXP1,IEXP2) (INTEGER)
Returns the bitwise and of two integer expressions
ANSION() (BOOLEAN)
Returns TRUE if the user has ANSI capabilities
ASC(SEXP) (INTEGER)
Returns the ASCII value (0-255) of the first character of SEXP
B2W(IEXP1,IEXP2) (INTEGER)
Returns a word built from two byte sized values by the formula:
(IEXP1*0100h+IEXP2)
CALLID() (STRING)
Returns the caller ID string
CALLNUM() (INTEGER)
Returns the caller number of the current user.
CARRIER() (INTEGER)
Returns the carrier speed as reported by the modem to PCBoard
CCTYPE(SEXP) (STRING)
Returns the issuer of credit card number SEXP
CDON() (BOOLEAN)
Returns TRUE if the carrier detect signal is on
CHR(IEXP) (STRING)
Returns a single character long string of the character
represented by ASCII code IEXP (0-255)
CURCOLOR() (INTEGER)
Returns the current color (0-255) in use by the ANSI driver
CURCONF() (INTEGER)
Returns the current conference number
CURSEC() (INTEGER)
Returns the users current security level
DATE() (DATE)
Returns todays date
DAY(DEXP) (INTEGER)
Returns the day of the month (1-31) of DEXP
DBGLEVEL() (INTEGER)
Returns the debug level in effect
DEFCOLOR() (INTEGER)
Returns the default color as specified in PCBSetup
DOW(DEXP) (INTEGER)
Returns the day of the week (0 = Sunday, 6 = Saturday) that
DEXP fell on
EXIST(SEXP) (BOOLEAN)
Returns a boolean TRUE value if the file SEXP exists
FERR(IEXP) (BOOLEAN)
Returns TRUE if a file access error occurred on channel IEXP
since the file was opened or FERR was last called
FILEINF(SEXP,IEXP) (BOOLEAN, DATE, INTEGER, STRING and TIME)
Returns a piece of information (specified by IEXP) about the
file SEXP
Valid values for IEXP: 1 = Return TRUE if file exists
2 = Return file date stamp
3 = Return file time stamp
4 = Return file size
5 = Return file attributes
01h = Read Only
02h = Hidden
04h = System
20h = Archive
6 = Return file drive
7 = Return file path
8 = Return file base name
9 = Return file extension
FMTCC(SEXP) (STRING)
Returns a formatted credit card number based on SEXP
GETENV(SEXP) (STRING)
Returns the value of the environment variable named by SEXP
GETTOKEN() (STRING)
Returns the next string token from a prior call to TOKENIZE
(Same as the GETTOKEN statement but can be used in an
expression without prior assignement to a variable)
GETX() (INTEGER)
Returns the current column (X position) of the cursor on the
display
GETY() (INTEGER)
Returns the current row (Y position) of the cursor on the
display
GRAFMODE() (STRING)
Returns a character indicating the users graphics status
R = RIPscrip supported, G = ANSI graphics (color and
positioning) supported, A = ANSI positioning (no color)
supported, or N = No graphics (RIP or ANSI) supported
HELPPATH() (STRING)
Returns the path, as specified in PCBSetup, to the help files
HOUR(TEXP) (INTEGER)
Returns the hour of the day (0-23) of TEXP
I2S(IEXP1,IEXP2) (STRING)
Returns a string representing the integer value IEXP1 converted
to base IEXP2
INKEY() (STRING)
Returns the next keypress as a single character long string, or
a string with the name of the function or cursor control key
INSTR(SEXP1,SEXP2) (INTEGER)
Returns the position of SEXP2 in SEXP1 (1-LEN(SEXP1)) or 0 if
SEXP2 not in SEXP1
KINKEY() (STRING)
Returns the next keypress from the BBS keyboard as a single
character long string, or a string with the name of the
function or cursor control key
LANGEXT() (STRING)
Returns the file extension for the users language selection
LEFT(SEXP,IEXP) (STRING)
Returns the left-most IEXP characters of SEXP
LEN(SEXP) (INTEGER)
Returns the length of SEXP
LOGGEDON() (BOOLEAN)
Returns TRUE if the user has already logged on to the BBS,
FALSE otherwise
LOWER(SEXP) (STRING)
Returns a string of SEXP with all uppercase characters
converted to lowercase characters
LTRIM(SEXP1,SEXP2) (STRING)
Returns a string of SEXP1 with the first character of SEXP2
trimmed from the left
MASK_ALNUM() (STRING)
Returns a valid character mask for input statements of
A through Z, a through z, and 0 through 9
MASK_ALPHA() (STRING)
Returns a valid character mask for input statements of
A through Z and a through z
MASK_ASCII() (STRING)
Returns a valid character mask for input statements of
space (" ") through tilde ("~")
MASK_FILE() (STRING)
Returns a valid character mask for input statements of
file names
MASK_NUM() (STRING)
Returns a valid character mask for input statements of
0 through 9
MASK_PATH() (STRING)
Returns a valid character mask for input statements of
path names
MASK_PWD() (STRING)
Returns a valid character mask for input statements of
passwords
MAXNODE() (INTEGER)
Returns the maximum node possible with the current software
(ie, /2 would return 2, /10 would return 10, etc)
MGETBYTE() (INTEGER)
Returns the value of the next byte from the modem (0-255) or -1
if there are no bytes waiting for input
MID(SEXP,IEXP1,IEXP2) (STRING)
Returns a string from SEXP starting at the IEXP1 position of
SEXP and containing IEXP2 characters of SEXP
MIN(TEXP) (INTEGER)
Returns the minute of the hour (0-59) of TEXP
MINKEY() (STRING)
Returns the next keypress from the remote caller as a single
character long string, or a string with the name of the
function or cursor control key
MINLEFT() (INTEGER)
Returns the current callers minutes left to use online
MINON() (INTEGER)
Returns the current callers minutes online so far this session
MKADDR(IEXP1,IEXP2) (INTEGER)
Returns a segment:offset address as a long integer built from
two word sized values by the formula: (IEXP1*00010000h+IEXP2)
MKDATE(IEXP1,IEXP2,IEXP3) (DATE)
Returns a date with the year specified by IEXP1 (1900-2079),
month specified by IEXP2 (1-12), and day specified by IEXP3
(1-31).
MODEM() (STRING)
Returns the modem connect string as reported by the modem to
PCBoard
MONTH(DEXP) (INTEGER)
Returns the month of the year (1-12) of DEXP
NOCHAR() (STRING)
Returns the current language no character
NOT(IEXP) (INTEGER)
Returns the bitwise complement (all bits inverted) of an
integer expression
ONLOCAL() (BOOLEAN)
Returns TRUE if the user is on locally
OR(IEXP1,IEXP2) (INTEGER)
Returns the bitwise or of two integer expressions
| PAGESTAT() (BOOLEAN)
| Returns TRUE if the user has paged the SysOp (or PAGEON has
| been issued), FALSE otherwise (or PAGEOFF has been issued)
PCBDAT() (STRING)
Returns a string with the path and file name of PCBOARD.DAT
PCBNODE() (INTEGER)
Returns the node number
PEEKB(IEXP) (INTEGER)
Returns a byte value (0-255) located at memory address IEXP
(PEEK is a synonym)
PEEKDW(IEXP) (INTEGER)
Returns a signed integer value (-2147483648 - +2147483647)
located at memory address IEXP
PEEKW(IEXP) (INTEGER)
Returns a word value (0-65535) located at memory address IEXP
PPENAME() (STRING)
Returns the name of the currently executing PPE file minus the
path and extension
PPEPATH() (STRING)
Returns a string with the path (no file name) of the currently
executing PPE file
PSA(IEXP) (BOOLEAN)
Returns TRUE if the feature specified by IEXP is enabled,
FALSE if the feature specified by IEXP is disabled
Valid values for IEXP: 1 = Alias Support Enabled
2 = Verify Support Enabled
3 = Address Support Enabled
4 = Password Support Enabled
5 = Statistics Support Enabled
6 = Notes Support Enabled
RANDOM(IEXP) (INTEGER)
Returns a random number between 0 and IEXP inclusive
READLINE(SEXP,IEXP) (STRING)
Read and return line number IEXP from file SEXP
REGAH() (INTEGER)
Returns the value of the AH register after a DOINTR statement
REGAL() (INTEGER)
Returns the value of the AL register after a DOINTR statement
REGAX() (INTEGER)
Returns the value of the AX register after a DOINTR statement
REGBH() (INTEGER)
Returns the value of the BH register after a DOINTR statement
REGBL() (INTEGER)
Returns the value of the BL register after a DOINTR statement
REGBX() (INTEGER)
Returns the value of the BX register after a DOINTR statement
REGCF() (BOOLEAN)
Returns the state of the carry flag after a DOINTR statement
REGCH() (INTEGER)
Returns the value of the CH register after a DOINTR statement
REGCL() (INTEGER)
Returns the value of the CL register after a DOINTR statement
REGCX() (INTEGER)
Returns the value of the CX register after a DOINTR statement
REGDH() (INTEGER)
Returns the value of the DH register after a DOINTR statement
REGDI() (INTEGER)
Returns the value of the DI register after a DOINTR statement
REGDL() (INTEGER)
Returns the value of the DL register after a DOINTR statement
REGDS() (INTEGER)
Returns the value of the DS register after a DOINTR statement
REGDX() (INTEGER)
Returns the value of the DX register after a DOINTR statement
REGES() (INTEGER)
Returns the value of the ES register after a DOINTR statement
REGF() (INTEGER)
Returns the value of the flags register after a DOINTR
statement
REGSI() (INTEGER)
Returns the value of the SI register after a DOINTR statement
REPLACE(SEXP1,SEXP2,SEXP3) (STRING)
Returns a string of SEXP1 with all occurences of the first
character of SEXP2 replaced by the first character of SEXP3
RIGHT(SEXP,IEXP) (STRING)
Returns the right-most IEXP characters of SEXP
RTRIM(SEXP1,SEXP2) (STRING)
Returns a string of SEXP1 with the first character of SEXP2
trimmed from the right
S2I(SEXP,IEXP) (INTEGER)
Returns an integer representing the string SEXP converted from
base IEXP
| SCRTEXT(IEXP1,IEXP2,IEXP3,BEXP) (STRING)
| Returns a string with the text (and color information in the
| form of @X codes if BEXP is TRUE) from column IEXP1, row IEXP2,
| and of length IEXP3
SEC(TEXP) (INTEGER)
Returns the second of the minute (0-59) of TEXP
| SHOWSTAT() (BOOLEAN)
| Returns TRUE if writing to the display is active, FALSE if
| writing to the display is disabled
SLPATH() (STRING)
Returns the path, as specified in PCBSetup, to the login
security files
SPACE(IEXP) (STRING)
Returns a string of spaces IEXP characters long
STRING(EXP) (STRING)
Returns EXP converted to a string
STRIP(SEXP1,SEXP2) (STRING)
Returns a string of SEXP1 with all occurrences of the first
character of SEXP2 removed
STRIPATX(SEXP) (STRING)
Returns a string of SEXP with all @X codes removed
SYSOPSEC() (INTEGER)
Returns the SysOp security defined in PCBOARD.DAT
TEMPPATH() (STRING)
Returns the path, as specified in PCBSetup, to the temporary
work directory
TIME() (TIME)
Returns the current time
TIMEAP(TEXP) (STRING)
Returns a string representing the time TEXP in civilian format
(XX:XX:XX AM)
TOKCOUNT() (INTEGER)
Returns the number of tokens available via the GETTOKEN
statement and/or function
TOKENSTR() (STRING)
Returns a previously tokenized string reconstructed with
semi-colons separating the component tokens
TRIM(SEXP1,SEXP2) (STRING)
Returns a string of SEXP1 with the first character of SEXP2
trimmed from both ends
UPPER(SEXP) (STRING)
Returns a string of SEXP with all lowercase characters
converted to uppercase characters
UN_CITY() (STRING)
Returns a nodes city from USERNET.XXX after a RDUNET statement
UN_NAME() (STRING)
Returns a nodes user name from USERNET.XXX after a RDUNET
statement
UN_OPER() (STRING)
Returns a nodes operation text from USERNET.XXX after a RDUNET
statement
UN_STAT() (STRING)
Returns a nodes status from USERNET.XXX after a RDUNET
statement
U_BDL() (INTEGER)
Returns the current users number of bytes downloaded
U_BDLDAY() (INTEGER)
Returns the current users number of bytes downloaded today
U_BUL() (INTEGER)
Returns the current users number of bytes uploaded
U_FDL() (INTEGER)
Returns the current users number of files downloaded
U_FUL() (INTEGER)
Returns the current users number of files uploaded
U_INCONF(IEXP1,IEXP2) (BOOLEAN)
Returns TRUE if user record number IEXP2 is registered in
conference IEXP1
U_LDATE() (DATE)
Returns the current users last date on the system
U_LDIR() (DATE)
Returns the current users last directory scan date
U_LOGONS() (INTEGER)
Returns the current users number of times logged on
U_LTIME() (TIME)
Returns the current users last time on the system
U_MSGRD() (INTEGER)
Returns the number of messages the user has read
U_MSGWR() (INTEGER)
Returns the number of messages the user has written
U_NAME() (STRING)
Returns the current users name
U_PWDHIST(IEXP) (STRING)
Returns the specified password from the password history
Valid values for IEXP are 1 through 3
U_PWDLC() (DATE)
Returns the date of the last password change
U_PWDTC() (INTEGER)
Returns the number of times the password has been changed
U_RECNUM(SEXP) (INTEGER)
Returns the user record number (0-65535) for user name SEXP or
-1 if SEXP is not registered on this system.
U_STAT(IEXP) (DATE or INTEGER)
Returns a statistic about the user that is tracked by PCBoard
Valid values for IEXP are 1 through 15
1 - Returns the first date the user called the system
2 - Returns the number of SysOp pages the user has requested
3 - Returns the number of group chats the user has
participated in
4 - Returns the number of comments the user has left
5 - Returns the number of 300 bps connects
6 - Returns the number of 1200 bps connects
7 - Returns the bumber of 2400 bps connects
8 - Returns the number of 9600 bps connects
9 - Returns the number of 14400 bps connects
10 - Returns the number of security violations
11 - Returns the number of "not registered in conference"
warnings
12 - Returns the number of times the users download limit
has been reached
13 - Returns the number of "file not found" warnings
14 - Returns the number of password errors the user has had
15 - Returns the number of verify errors the user has had
U_TIMEON() (INTEGER)
Returns the current users time online today in minutes
VALCC(SEXP) (BOOLEAN)
Returns TRUE if SEXP is a valid credit card number
VALDATE(SEXP) (BOOLEAN)
Returns TRUE if SEXP is in a valid date format
VALTIME(SEXP) (BOOLEAN)
Returns TRUE if SEXP is in a valid time format
VER() (INTEGER)
Returns the version number of PCBoard that is running
XOR(IEXP1,IEXP2) (INTEGER)
Returns the bitwise exclusive-or of two integer expressions
YEAR(DEXP) (INTEGER)
Returns the year (1900-2079) of DEXP
YESCHAR() (STRING)
Returns the current language yes character
STATEMENTS
PPL recognizes the following statements with the specified
arguments to perform the specified operations (some statements
require no arguments, in which case there is nothing following the
statement; if arguments are required, they may be of two types,
expression and variable; expression arguments may all be
expressions of any type, but will be converted to one of the
following types prior to function evaluation: BEXP (BOOLEAN),
DEXP (DATE), IEXP (INTEGER), MEXP (MONEY), SEXP (STRING), TEXP
(TIME); variable arguments (VAR) may be variables of any type, but
may be converted to and from an appropriate type in order to
accomplish the required statement):
ADJTIME IEXP
Add or subtract IEXP minutes to the users time available this
session
ANSIPOS IEXP1,IEXP2
If ANSI is available, position the cursor in
column IEXP1 row IEXP2
Legal ranges: 1 <= IEXP1 <= 80
1 <= IEXP2 <= 23 (Because of the status lines)
(1,1) is the top left corner of the screen
BACKUP IEXP
Backup (move the cursor to the left) IEXP columns without going
past column 1
BLT IEXP
Display bulletin number IEXP
BROADCAST IEXP1,IEXP2,SEXP
Broadcast message SEXP to nodes from IEXP1 to IEXP2 inclusive
BYE
Same as having the user type BYE from the command prompt
CALL SEXP
Load and execute PPE filename specified by SEXP
CDCHKOFF
Turn off carrier detect checking
CDCHKON
Turn on carrier detect checking
CHAT
Initiate SysOp chat mode
CLOSECAP
Close the capture file previously opened with OPENCAP
CLREOL
Clear to the end of the line, with the current color if in ANSI
mode
CLS
Clear the screen, with the current color if in ANSI mode
COLOR IEXP
Change the current color to IEXP
CONFFLAG IEXP1,IEXP2
Turn on the conference IEXP1 flags specified by IEXP2
CONFUNFLAG IEXP1,IEXP2
Turn off the conference IEXP1 flags specified by IEXP2
DBGLEVEL IEXP
Set the debug level to IEXP
DEC VAR
Decrement the value of VAR
DEFCOLOR
Resets the current color to the system default
DELAY IEXP
Pause for IEXP clock ticks
(1 clock tick = approximately 1/18.2 second)
DELETE SEXP
Deletes the filename specified by SEXP (ERASE is a synonym)
DELUSER
Flags the current user record for deletion
DIR SEXP
Performs a file directory command, passing it SEXP as arguments
DISPFILE SEXP,IEXP
Display file SEXP with IEXP alternate file flags
(valid flags = GRAPH, SEC, LANG)
DISPSTR SEXP
Display file if SEXP is "%filename", execute PPE if SEXP is
"!filename", or display string SEXP
DISPTEXT IEXP1,IEXP2
Display PCBTEXT prompt IEXP1 using flags IEXP2
(valid flags = NEWLINE, LFBEFORE, LFAFTER, BELL, LOGIT,
LOGITLEFT)
DOINTR IEXP1,IEXP2,IEXP3,IEXP4,IEXP5,IEXP6,IEXP7,IEXP8,IEXP9,IEXP10
Generate interrupt number IEXP1 (0-255) with the following
register values:
AX = IEXP2
BX = IEXP3
CX = IEXP4
DX = IEXP5
SI = IEXP6
DI = IEXP7
FLAGS = IEXP8
DS = IEXP9
ES = IEXP10
DTROFF
Turn off the DTR signal
DTRON
Turn on the DTR signal
END
End PPE execution
FAPPEND IEXP1,SEXP,IEXP2,IEXP3
Use channel IEXP1 to open file SEXP in append mode with access
mode IEXP2 and share mode IEXP3
(valid channels = 0 - 7 [0 is used for script questionnaires])
(valid access modes = O_RD, O_WR, O_RW [should use O_RW])
(valid share modes = S_DN, S_DR, S_DW, S_DB)
FCLOSE IEXP
Close channel IEXP
FCREATE IEXP1,SEXP,IEXP2,IEXP3
Use channel IEXP1 to create and open file SEXP in access mode
IEXP2 and share mode IEXP3
(valid channels = 0 - 7 [0 is used for script questionnaires])
(valid access modes = O_RD, O_WR, O_RW [should use O_WR])
(valid share modes = S_DN, S_DR, S_DW, S_DB)
FGET IEXP,VAR
Read a line from channel IEXP and assign it to VAR
FOPEN IEXP1,SEXP,IEXP2,IEXP3
Use channel IEXP1 to open file SEXP in access mode IEXP2 and
share mode IEXP3
(valid channels = 0 - 7 [0 is used for script questionnaires])
(valid access modes = O_RD, O_WR, O_RW)
(valid share modes = S_DN, S_DR, S_DW, S_DB)
FOR VAR = IEXP1 TO IEXP2 [STEP IEXP3]
statement(s)
NEXT
FOR - Initializes a loop by assigning IEXP1 to VAR and
continuing while VAR <= IEXP2 (if IEXP3 >= 0) or VAR >= IEXP2
(if IEXP3 < 0) (TO is required to separate IEXP1 and IEXP2;
if STEP (optional) is not specified IEXP3 defaults to 1)
NEXT - Adds IEXP3 to VAR, transfers control to the closest FOR
statement, and marks the end of the FOR loop (ENDFOR and END
FOR are synonyms)
FORWARD IEXP
Move the cursor forward (to the right) IEXP columns without
going past column 80
FPUT IEXP,SEXP[,SEXP...]
Write one or more SEXP out to channel IEXP
FPUTLN IEXP[,SEXP[,SEXP...]]
Write zero or more SEXP out to channel IEXP and terminate with
a carriage return/line feed pair
FPUTPAD IEXP1,SEXP,IEXP2
Write out SEXP, padding or truncating to length IEXP2 as
needed, to channel IEXP1
FRESHLINE
If the cursor is not in column 1, do a newline
FREWIND IEXP
Rewind channel IEXP after flushing buffers and committing the
file to disk.
GETTOKEN VAR
Get a token from a previous call to tokenize and assign
it to VAR
GETUSER
Fill the predefined variables (U_...) with current information
from the user record
GOSUB LABEL
Transfer control to LABEL, marking the current PPE location for
a future RETURN statement (GO SUB is a synonym)
GOTO LABEL
Transfer control to LABEL (GO TO is a synonym)
GOODBYE
Same as having the user type G from the command prompt
HANGUP
Hangup on the user without any notification
IF (BEXP) statement ...
Evaluate BEXP and, if true, execute statement; otherwise skip
to the next statement
IF (BEXP) THEN
statement(s)
ELSEIF (BEXP) THEN
statement(s)
ELSE
statement(s)
ENDIF
IF - If expression cond is TRUE then this statement transfers
control to the statement(s) following it, otherwise control
is tranferred to the next ELSEIF, ELSE or ENDIF statement
(requires THEN [or DO] after the condition)
ELSEIF - (optional) If expression cond is TRUE then this
statement transfers control to the statements following it,
otherwise control is tranferred to the next ELSEIF, ELSE or
ENDIF statement (There may be multiple ELSEIF statements
between the IF and ELSE statements (ELSE IF is a synonym;
nothing is required to come after the condition, although
THEN [or DO] may appear for clarification and consistency in
the source code)
ELSE - (optional) Separates the false portion of an IF/ELSEIF
statement from the true portion
ENDIF - Ends an IF/ELSEIF/ELSE statement block (END IF is a
synonym)
INC VAR
Increment the value of VAR
INPUT SEXP,VAR
Display SEXP and get input from user, assigning it to VAR
(60 characters maximum)
INPUTCC SEXP,VAR,IEXP
Display SEXP in color IEXP and get a credit card formatted
string from the user, assigning it to VAR
(16 characters maximum, valid characters 0-9)
INPUTDATE SEXP,VAR,IEXP
Display SEXP in color IEXP and get a date formatted string from
the user, assigning it to VAR
(8 characters maximum, valid characters 0-9 - /)
INPUTINT SEXP,VAR,IEXP
Display SEXP in color IEXP and get an integer formatted string
from the user, assigning it to VAR
(11 characters maximum, valid characters 0-9)
INPUTMONEY SEXP,VAR,IEXP
Display SEXP in color IEXP and get a money formatted string
from the user, assigning it to VAR
(13 characters maximum, valid characters 0-9 $ .)
INPUTSTR SEXP1,VAR,IEXP1,IEXP2,SEXP2,IEXP3
Display SEXP1 in color IEXP1 and get a string (maximum length
IEXP2, valid characters SEXP2, flags IEXP3) from the user,
assigning it to VAR
(valid length = 1-256)
(valid characters = any string)
(valid flags = ECHODOTS, FIELDLEN, GUIDE, UPCASE, STACKED,
ERASELINE, NEWLINE, LFBEFORE, LFAFTER, WORDWRAP, NOCLEAR,
HIGHASCII, AUTO, YESNO)
INPUTTEXT SEXP,VAR,IEXP1,IEXP2
Display SEXP in color IEXP1 and get a string (maximum length
IEXP2) from the user, assigning it to VAR
INPUTTIME SEXP,VAR,IEXP
Display SEXP in color IEXP and get a time formatted string from
the user, assigning it to VAR
(8 characters maximum, valid characters 0-9 :)
INPUTYN SEXP,VAR,IEXP
Display SEXP in color IEXP and get a yes/no response from
the user, assigning it to VAR
(1 characters maximum, valid characters determined by language)
JOIN SEXP
Performs a join conference command, passing it SEXP as
arguments
KBDCHKOFF
Turn off keyboard time out checking
KBDCHKON
Turn on keyboard time out checking
KBDFILE SEXP
Stuff the keyboard buffer with the contents of file SEXP
KBDSTUFF SEXP
Stuff the keyboard buffer with the contents of SEXP
LET VAR = EXP
Evaluate expression EXP, convert and assign to VAR
(NOTE: LET is the only optional keyword. If no keyword is
found, LET is assumed. There are certain circumstances where
it may be required, such as assignment to a variable named the
same as a statement (PRINT, for example, would require a line
such as LET PRINT = TRUE instead of just PRINT = TRUE)
LOG SEXP,BEXP
Write string SEXP to the callers log, left justified if BEXP is
TRUE
MESSAGE IEXP,SEXP1,SEXP2,SEXP3,SEXP4,DEXP,BEXP1,BEXP2,SEXP5
Write a message in conference IEXP, to user SEXP1 (empty string
defaults to current caller), from user SEXP2 (empty string
defaults to current caller), subject SEXP3, security in SEXP4
(N or R; N is the default), pack out date in DEXP (0 for no
pack out date), BEXP1 TRUE if return receipt desired, BEXP2
TRUE if message should be echoed, and SEXP5 is the filename to
use for the message text
MORE
Displays a MORE? prompt
MPRINT SEXP[,SEXP...]
Display one or more string expressions on the callers screen
only (this statement does not send anything to the BBS screen)
MPRINTLN [SEXP[,SEXP...]]
Display zero or more string expressions on the callers screen
only and follow with a newline (this statement does not send
anything to the BBS screen)
NEWLINE
Write a newline to the display
NEWLINES IEXP
Write IEXP newlines to the display
OPENCAP SEXP,VAR
Open SEXP and capture all screen output to it. If an error
occurs creating or opening SEXP, VAR is set to TRUE, otherwise
VAR is set to FALSE.
OPTEXT SEXP
Writes string SEXP into the @OPTEXT@ macro
| PAGEOFF
| Turn off the SysOp paged indicator (flashing p on status line)
|
| PAGEON
| Turn on the SysOp paged indicator (flashing p on status line)
POKEB IEXP1,IEXP2
Assign the value IEXP2 (0-255) to memory address IEXP1
(POKE is a synonym)
POKEDW IEXP1,IEXP2
Assign the value IEXP2 (-2147483648 - +2147483647) to memory
address IEXP1
POKEW IEXP1,IEXP2
Assign the value IEXP2 (0-65535) to memory address IEXP1
POP VAR[,VAR...]
Pop values (previously pushed onto the stack) into a list of
variables
PRINT SEXP[,SEXP...]
Display one or more string expressions
PRINTLN [SEXP[,SEXP...]]
Display zero or more string expressions and follow with a
newline
PROMPTSTR IEXP1,VAR,IEXP2,SEXP,IEXP3
Display PCBTEXT entry IEXP1 and get a string (maximum length
IEXP2, valid characters SEXP, flags IEXP3) from the user,
assigning it to VAR
(valid length = 1-256)
(valid characters = any string)
(valid flags = ECHODOTS, FIELDLEN, GUIDE, UPCASE, STACKED,
ERASELINE, NEWLINE, LFBEFORE, LFAFTER, WORDWRAP, NOCLEAR,
HIGHASCII, AUTO, YESNO)
PUSH EXP[,EXP...]
Push a list of evaluated expressions onto the stack
PUTUSER
Write the information from the predefined variables (U_...) to
the user record
QUEST IEXP
Do script questionnaire IEXP
RDUNET IEXP
Read information from USERNET.XXX for node IEXP
RDUSYS
Reads a USERS.SYS file, if present, and updates the users
record
RENAME SEXP1,SEXP2
Rename file SEXP1 to SEXP2
RESETDISP
Reset the display after an user abort
RESTSCRN
Restore the screen from the buffer previously saved with
SAVESCRN
RETURN
Return to the statement after the last GOSUB or, if no GOSUB is
waiting for a RETURN, END the PPE
SAVESCRN
Save the current screen in a buffer for later restoration with
the RESTSCRN
SENDMODEM SEXP
Send the text in SEXP out to the modem
SHELL BEXP,VAR,SEXP1,SEXP2
Shell (via COMMAND.COM if BEXP is TRUE) to program/command
SEXP1 with arguments SEXP2, saving the return value in VAR
(NOTE: If BEXP is TRUE, the value assigned to VAR will be the
return code of COMMAND.COM, not SEXP1)
| SHOWOFF
| Turns off display of information to the screen
|
| SHOWON
| Turns on display of information to the screen
SOUND IEXP
Turn on the BBS PC speaker at the frequency (1-65535) specified
by IEXP (or turn it off if the frequency is 0)
SPRINT SEXP[,SEXP...]
Display one or more string expressions on the BBS screen only
(this statement does not send anything to the modem)
SPRINTLN [SEXP[,SEXP...]]
Display zero or more string expressions on the BBS screen only
and follow with a newline (this statement does not send
anything to the modem)
STARTDISP IEXP
Start display monitoring in mode IEXP
(valid modes = NC, FNS, FCL)
STOP
Abort PPE execution without appending answers (channel 0) to
the answer file
TOKENIZE SEXP
Tokenize string SEXP into individual items separated by
semi-colons or spaces
VARADDR VAR1,VAR2
Assign the address (segment and offset) of VAR1 to VAR2
VAROFF VAR1,VAR2
Assign the offset address of VAR1 to VAR2
VARSEG VAR1,VAR2
Assign the segment address of VAR1 to VAR2
WAIT
Displays a PRESS ENTER TO CONTINUE? prompt
WAITFOR SEXP,VAR,IEXP
Wait up to IEXP seconds for the string SEXP, assigned TRUE to
VAR if the string is found in the time specified or FALSE if
the string is not found (WAIT FOR is a synonym)
WHILE (BEXP) statement ...
While BEXP is true execute statement; when BEXP is false
execute following statements
WHILE (BEXP) DO
statement(s)
ENDWHILE
WHILE - While BEXP is true execute statement(s); when BEXP is
false transfer control to the first statement following the
ENDWHILE statement (requires DO [or THEN] after the
expression)
ENDWHILE - Transfers control to the closest WHILE statement and
marks the end of the WHILE loop (END WHILE is a synonym)
WRUNET IEXP,SEXP1,SEXP2,SEXP3,SEXP4,SEXP5
Write information to USERNET.XXX for node IEXP, where SEXP1 is
the new node status, SEXP2 is the new node user name, SEXP3 is
the new node city, SEXP4 is the new node operation text, and
SEXP5 is broadcast text
WRUSYS
Writes (creates) a USERS.SYS file which can be used by a
SHELLed application